/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camachosanchez.gui;

import com.camachosanchez.bean.TiposEje;
import com.camachosanchez.bean.TiposVehiculo;
import com.camachosanchez.controler.jdbc.TipoEjeJdbcControler;
import com.camachosanchez.controler.jpa.TiposEjeJpaController;
import com.camachosanchez.controler.jpa.TiposVehiculoJpaController;
import com.camachosanchez.gui.textfield.MaxLengthTextDocument;
import com.camachosanchez.util.Constantes;
import com.camachosanchez.util.GUIUtil;
import com.camachosanchez.util.SQLUtil;
import java.awt.event.KeyEvent;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;

/**
 *
 * @author ZULLY
 */
public class EditorModeloEje extends javax.swing.JDialog {

    /**
     * Creates new form EditorModeloEje
     */
    private MaestroModeloEjes buscador;
    private int fila;
    private TiposEje tipoEje;
    MaxLengthTextDocument docNombre = new MaxLengthTextDocument();

    public EditorModeloEje(MaestroModeloEjes buscador, java.awt.Frame parent, boolean modal, TiposEje tipoEje, int fila) {
        super(parent, modal);
        initComponents();
        this.setLocationRelativeTo(null);
        GUIUtil.addEscapeKey(this);
        this.buscador = buscador;
        this.fila = fila;

        txtNombre.requestFocusInWindow();
        this.setResizable(false);
        docNombre.setMaxChars(40, Constantes.ANY);
        txtNombre.setDocument(docNombre);
//        txtNombre.setText();

        TiposVehiculoJpaController tipos_vehiculo_dao = new TiposVehiculoJpaController(null);
        List<TiposVehiculo> tipos_vehiculos = tipos_vehiculo_dao.findTiposVehiculoEntities();
        cmbTipoUnidad.setModel(new DefaultComboBoxModel(tipos_vehiculos.toArray()));

        if (tipoEje != null) {
            this.CargarDatosTipoEje(tipoEje);
            this.tipoEje = tipoEje;
        }
    }

    private void CargarDatosTipoEje(TiposEje tipoEje) {
        txtNombre.setText(tipoEje.getNombre());
        checkActivo.setSelected(tipoEje.getActivo());
        txpDescripcion.setText(tipoEje.getDescripcion());
        cmbTipoUnidad.setSelectedItem(tipoEje.getIdTipoVehiculo());
    }

    private boolean ValidarDatos() {
        if (txtNombre.getText().isEmpty()) {
            JOptionPane.showMessageDialog(this, "Se requiere un nombre para el modelo de eje.", "Datos incompletos", JOptionPane.WARNING_MESSAGE);
            txtNombre.requestFocusInWindow();
            return false;
        }
        TipoEjeJdbcControler daoJdbc = new TipoEjeJdbcControler();
        int idExisteEje = daoJdbc.existeTipoEje(txtNombre.getText());
        if (idExisteEje != 0 && idExisteEje != this.tipoEje.getId()) {//si encuentra un eje con el mismo nombre pero diferente al que se está registrando
            JOptionPane.showMessageDialog(this, "El nombre asignado al modelo ya existe.", Constantes.DATOS_INCOMPLETOS, JOptionPane.WARNING_MESSAGE);
            txtNombre.requestFocusInWindow();
            return false;
        }
        return true;
    }

    private TiposEje LeerDatosTipoEje() {
        TiposEje t = new TiposEje();
        t.setNombre(txtNombre.getText().trim());
        t.setDescripcion(txpDescripcion.getText());
        t.setActivo(checkActivo.isSelected());
        if (this.tipoEje != null) {
            t.setIdTipoVehiculo(this.tipoEje.getIdTipoVehiculo());
            t.setEjesList(this.tipoEje.getEjesList());
            t.setVehiculosList(this.tipoEje.getVehiculosList());
        }
        return t;
    }

    private void ModificarTipoEje(TiposEje tipoEje) {
        TiposEjeJpaController dao_tipoEje = new TiposEjeJpaController(null);
        try {
            tipoEje.setEstado(true);
            tipoEje.setId(this.tipoEje.getId());
            dao_tipoEje.edit(tipoEje);
            JOptionPane.showMessageDialog(this, "Los datos del modelo de eje han sido actualizados correctamente.", "Operación finalizada", JOptionPane.INFORMATION_MESSAGE);
            dispose();
            buscador.llenarModelosEjes();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(Principal.getInstance(), e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
        }
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        pnlContenedor = new javax.swing.JPanel();
        lblMedida = new javax.swing.JLabel();
        txtNombre = new javax.swing.JTextField();
        lblAnchoLlanta = new javax.swing.JLabel();
        tbpDescripcion = new javax.swing.JTabbedPane();
        pnlDescripcion = new javax.swing.JPanel();
        scrDescripcion = new javax.swing.JScrollPane();
        txpDescripcion = new javax.swing.JTextPane();
        checkActivo = new javax.swing.JCheckBox();
        jLabel1 = new javax.swing.JLabel();
        cmbTipoUnidad = new javax.swing.JComboBox();
        toolBarPrincipal = new javax.swing.JToolBar();
        pnlToolBar = new javax.swing.JPanel();
        btnGuardar = new javax.swing.JButton();
        btnEliminar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Modelo de Eje");

        lblMedida.setText("<html>Nombre: <font color=\"red\">(*)</font> </html>");

        txtNombre.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtNombreKeyPressed(evt);
            }
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtNombreKeyTyped(evt);
            }
        });

        lblAnchoLlanta.setText("Estado:");

        tbpDescripcion.setBackground(new java.awt.Color(188, 211, 226));

        pnlDescripcion.setLayout(new java.awt.BorderLayout());

        scrDescripcion.setViewportView(txpDescripcion);

        pnlDescripcion.add(scrDescripcion, java.awt.BorderLayout.CENTER);

        tbpDescripcion.addTab("Comentarios", pnlDescripcion);

        checkActivo.setText("Activo");

        jLabel1.setText("Tipo Unidad:");

        cmbTipoUnidad.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbTipoUnidad.setEnabled(false);

        javax.swing.GroupLayout pnlContenedorLayout = new javax.swing.GroupLayout(pnlContenedor);
        pnlContenedor.setLayout(pnlContenedorLayout);
        pnlContenedorLayout.setHorizontalGroup(
            pnlContenedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlContenedorLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlContenedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(tbpDescripcion, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 314, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, pnlContenedorLayout.createSequentialGroup()
                        .addComponent(lblMedida, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(txtNombre, javax.swing.GroupLayout.DEFAULT_SIZE, 238, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, pnlContenedorLayout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addGap(18, 18, 18)
                        .addComponent(cmbTipoUnidad, 0, 119, Short.MAX_VALUE)
                        .addGap(18, 18, 18)
                        .addComponent(lblAnchoLlanta)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(checkActivo)
                        .addGap(1, 1, 1)))
                .addContainerGap())
        );
        pnlContenedorLayout.setVerticalGroup(
            pnlContenedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlContenedorLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlContenedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblMedida, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(txtNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(6, 6, 6)
                .addGroup(pnlContenedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(cmbTipoUnidad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblAnchoLlanta)
                    .addComponent(checkActivo))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(tbpDescripcion, javax.swing.GroupLayout.DEFAULT_SIZE, 99, Short.MAX_VALUE)
                .addContainerGap())
        );

        getContentPane().add(pnlContenedor, java.awt.BorderLayout.CENTER);

        toolBarPrincipal.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        toolBarPrincipal.setFloatable(false);
        toolBarPrincipal.setRollover(true);
        toolBarPrincipal.setOpaque(false);

        pnlToolBar.setBackground(new java.awt.Color(255, 255, 255));
        pnlToolBar.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));

        btnGuardar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/24_save.png"))); // NOI18N
        btnGuardar.setToolTipText("Guardar");
        btnGuardar.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnGuardar.setFocusable(false);
        btnGuardar.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnGuardar.setMaximumSize(new java.awt.Dimension(22, 22));
        btnGuardar.setMinimumSize(new java.awt.Dimension(22, 22));
        btnGuardar.setPreferredSize(new java.awt.Dimension(22, 22));
        btnGuardar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnGuardarActionPerformed(evt);
            }
        });
        pnlToolBar.add(btnGuardar);

        btnEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/24_delete.png"))); // NOI18N
        btnEliminar.setToolTipText("Eliminar");
        btnEliminar.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnEliminar.setFocusable(false);
        btnEliminar.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnEliminar.setMaximumSize(new java.awt.Dimension(22, 22));
        btnEliminar.setMinimumSize(new java.awt.Dimension(22, 22));
        btnEliminar.setPreferredSize(new java.awt.Dimension(22, 22));
        btnEliminar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminarActionPerformed(evt);
            }
        });
        pnlToolBar.add(btnEliminar);

        toolBarPrincipal.add(pnlToolBar);

        getContentPane().add(toolBarPrincipal, java.awt.BorderLayout.PAGE_START);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void txtNombreKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtNombreKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            checkActivo.requestFocusInWindow();
        }
    }//GEN-LAST:event_txtNombreKeyPressed

    private void txtNombreKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtNombreKeyTyped
        // TODO add your handling code here:
        String caracteres = txtNombre.getText();
        if (caracteres.length() >= 40) {
            evt.consume();
        }
    }//GEN-LAST:event_txtNombreKeyTyped

    private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGuardarActionPerformed
        // TODO add your handling code here:
        if (ValidarDatos()) {
            ModificarTipoEje(LeerDatosTipoEje());
        }
    }//GEN-LAST:event_btnGuardarActionPerformed

    private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarActionPerformed
        // TODO add your handling code here:
        if (JOptionPane.showConfirmDialog(null, "¿Está seguro que desea eliminar este modelo de eje?", "Confirmación", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
            if (SQLUtil.existeModeloEjeAsignado(tipoEje.getId())) {
                JOptionPane.showMessageDialog(this, "El modelo de eje se encuentra relacionado con otros registros, no puede ser eliminado.", "Error en la eliminación", JOptionPane.ERROR_MESSAGE);
            } else {
                TiposEjeJpaController dao_tipoEje = new TiposEjeJpaController(null);
                try {
                    tipoEje.setEstado(false);
                    dao_tipoEje.edit(tipoEje);
                    JOptionPane.showMessageDialog(this, "El modelo de eje se ha eliminado de forma segura.", "Operación finalizada", JOptionPane.INFORMATION_MESSAGE);
                    buscador.borrarTipoEje(fila);
                    dispose();
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(Principal.getInstance(), e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
                }
            }
//            TipoEjeJdbcControler daoJdbc = new TipoEjeJdbcControler();
//            byte estado = daoJdbc.eliminarTipoEje(this.tipoEje.getId());
//            if (estado == 1) {
//                JOptionPane.showMessageDialog(this, "El modelo de eje se encuentra relacionado con otros registros, no puede ser eliminado.", "Error en la eliminación", JOptionPane.ERROR_MESSAGE);
//            } else {
//                JOptionPane.showMessageDialog(this, "El modelo de eje se ha eliminado de forma segura.", "Operación finalizada", JOptionPane.INFORMATION_MESSAGE);
//                buscador.borrarTipoEje(fila);
//                dispose();
//            }
        }
    }//GEN-LAST:event_btnEliminarActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnGuardar;
    private javax.swing.JCheckBox checkActivo;
    private javax.swing.JComboBox cmbTipoUnidad;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel lblAnchoLlanta;
    private javax.swing.JLabel lblMedida;
    private javax.swing.JPanel pnlContenedor;
    private javax.swing.JPanel pnlDescripcion;
    private javax.swing.JPanel pnlToolBar;
    private javax.swing.JScrollPane scrDescripcion;
    private javax.swing.JTabbedPane tbpDescripcion;
    private javax.swing.JToolBar toolBarPrincipal;
    private javax.swing.JTextPane txpDescripcion;
    private javax.swing.JTextField txtNombre;
    // End of variables declaration//GEN-END:variables
}
